//
//  KKUserAccountModel.swift
//  KKWeibo
//
//  Created by kassia on 16/7/12.
//  Copyright © 2016年 kassia. All rights reserved.
//

import UIKit
//  封装OAuth登录相关接口

class KKUserAccountModel: NSObject {

    //  单例访问点
    static let sharedUserAccount: KKUserAccountModel = KKUserAccountModel()
    //获取用户对象从沙盒中
    var userAccount: KKUserAccount? {
    
        //解档用户对象
        return KKUserAccount.readUserAccount()
    
    }
    
    //构造函数私有化
    private override init() {
       super.init()
    }
    
    //  封装判断accessToken是否为nil,表示登陆结果
    var isLogin: Bool {

        return accessToken != nil
    }
    
    /*
    如果accessToken为nil, 不用判断,表示没有登陆
    如果accessToken不nil, 判断accessToken是否过期,不过期返回一个正确的accessToken,过期返回nil
    */
    var accessToken: String? {
    
        //判断accessToken 是否为nil,为nil表示没有登陆
        guard let token = userAccount?.access_token else {
          return nil
        }
        
         //  token一定有值, 过期时间大于我们当前时间表示没有过期
        let result = userAccount?.expiresDate?.compare(NSDate())
        
        if result == NSComparisonResult.OrderedDescending {
           return token
        } else {
           return nil
        
        }
        
    }
    
    //通过code获取accesstoken
    func requestAccessToken(code: String,callback: (isSucess: Bool)->()){
        
        KKNetworkTool.sharedTools.requsetAccesstoken(code) { (response, error) -> () in
            
            if error != nil{
                
                callback(isSucess: false)
                
                print(error)
                
            }
            
            guard let dict = response as? [String: AnyObject] else {
                
                callback(isSucess: false)
                
                print("这不是一个正确的json格式")
                
                return
            }
            
            let userAccount = KKUserAccount(dic: dict)
            
            //获取用户信息
            self.getUserAccount(userAccount, callback: callback)
        }
        
    }
    
    //获取用户信息
    private func getUserAccount(userAccount: KKUserAccount,callback: (isSuccess: Bool)->()) {
        
        KKNetworkTool.sharedTools.requestUserAccount(userAccount) { (response, error) -> () in
            
            if error != nil {
                callback(isSuccess: false)
                print("用户数据请求有误")
                return
            }
            
            guard let dict = response as? [String: AnyObject] else {
                callback(isSuccess: false)
                print("用户数据格式不正确")
                return                
            }
            
            //代码执行到此一定有值
            let name = dict["name"]
            let avatar_large  = dict["avatar_large"]
            
            //设置用户名和图像
            userAccount.name = name as? String
            
            userAccount.avatar_large = avatar_large as? String
            
            //保存用户对象
            userAccount.saveUserAccount()
            
            print(userAccount)
            //成功的回调
            callback(isSuccess: true)
        }
        
    }
    

    
}
